import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

class Student {
//    普通成员变量
    public String name;
    public double score;
    public int age;
//    静态成员变量[类变量]:《通过类名访问》 生命周期帮随类的一生
    public static String classes = "105java";//班级  加上static成员变量就被存到方法区
//  静态成员变量不属于对象   加上final说明他是一个常量不能被改变
    public Student(String name, double score, int age) {
        this.name = name;
        this.score = score;
        this.age = age;
        System.out.println("带有三个参数的构造方法执行了！");
    }
//    实例代码块
    {
        System.out.println("实例代码块");
    }
//    静态代码块
    static {
    classes =  "106java";
    System.out.println("静态代码块");
    }

    public void goClass(){
        System.out.println(name+"上课！");
    }
//    而非静态方法可以调用静态成员变量

    public static void  staticFunc(){
        System.out.println("这是一个静态的方法—》类方法");
    }
//    这个时候不能在静态方法里面调用成员变量，因为成员变量依赖对象
}


//    总结：静态方法里不能直接访问非静态的,可以提供对象的引用来访问非静态的

public class TestDemo {
    public static void main(String[] args) {
        Student student = new Student("huangzijian",100,19);
        System.out.println("===================");
        Student student1 = new Student("gaobo",59,30);
//        静态的只会执行一次
    }
    public static void main3(String[] args) {
        System.out.println(Student.classes);
//        若有多个静态的看先后顺序，所以这里被改为了106java
//        而没有实例化对象，那么不执行实例化代码块，有多个实例化对象也是看先后顺序
    }
    public static void main2(String[] args) {
        Student student = new Student("huangzijian",100,19);
// 结果为： 静态代码块
//        实例代码块
//        带有三个参数的构造方法执行了！
//        故执行顺序为静态，实例，构造
    }
    public static void main1(String[] args) {
        Student student = new Student("huangzijian",59.9,20);
        System.out.println(Student.classes);
        Student.staticFunc();
        Student student1 = new Student("gaono",100,30);
        System.out.println(Student.classes);
        Student.staticFunc();
    }
}
